package persistence.factory;

import java.io.Serializable;
import java.util.Map;
import persistence.dao.mysql.POIDAO;
import persistence.dao.mysql.TagDAO;
import persistence.dao.mysql.TypeDAO;

/**
 * Classe de fabrique abstraite des DAOs
 * @author Wadjahdi Marc
 */
public abstract class AbstractDAOFactory implements Serializable{

    /**
     *  Type de DAO à utiliser
     */
    private DAOType type;

    /**
     * Méthode pour se connecter à la base de données
     * @param properties HashMap contenant les données utiles à la connection
     */
    public abstract boolean createConnection(Map<String,String> properties);

    /**
     * Méthode pour se deconnecter de la base de données
     */
    public abstract void closeConnection();

    /**
     * Méthode permetant d'obtenir un TypeDAO
     * @return
     */
    public abstract TypeDAO getTypeDAO();

    /**
     * Méthode permetant d'obtenir un POIDAO
     * @return
     */
    public abstract POIDAO getPOIDAO();

    /**
     * Méthode permetant d'obtenir un TagDAO
     * @return
     */
    public abstract TagDAO getTagDAO();
    
    /**
     * Méthode permetant d'obtenir la fabrique selon le type de DAO utilisé
     * @param type Type de DAO utilisé
     * @return
     */
    public static AbstractDAOFactory getFactory(DAOType type) {
        switch(type) {
            case MYSQL:
                return new MySQLDAOFactory();
            default:
                return null;
        }
    }
}
